GameMaker Studio 2 具有许多用于从多个已连接的游戏手柄中检测模拟和数字控制信号的专用函数。这些函数类似于 设备输入,因为你可以检测最多四个连接的 XInput 游戏手柄(以及最多 8 个 DirectInput 游戏手柄),并使用相同的函数处理每个输入。请注意,当游戏手柄插入你的设备(或被删除)时,会触发异步 系统事件,你可以使用适当的函数处理该情况。
游戏手柄 “插槽” 从 0 开始索引,插槽 0 - 3 包含 仅用于 Xinput 游戏手柄,即:Xbox360 控制器和兼容机。但是,你也可以检查 DirectInput 游戏手柄的 4 - 11 插槽,这意味着当通过这些插槽连接时,你可以检测到许多其他型号的控制器。值得注意的是,当使用 DirectInput 游戏手柄时,由于控制器制造商实施 API 的分散和非标准化方式,下面给出的常量可能与按下它们时所期望的按钮完全不匹配。因此,建议你在游戏中使用某种游戏手柄设置屏幕,人们可以根据任何连接到设备的输入(手柄)重新定义游戏手柄按键,以缓解任何问题(在 Windows 桌面、Ubuntu、macOS 和 Android 目标平台,有游戏手柄 “映射” 函数可以帮助你达到此目的 ,而在其他所有目标平台上,你需要自己使用代码执行此操作)。另请注意,Direct Input 游戏手柄以 协作模式 运行,这意味着你的游戏只有在它是前台应用程序时才能访问它们,否则会导致 Direct Input 控制器 “丢失”,如果游戏失去焦点然后重新获得焦点则会再次 “找到” 该控制器(这可以在系统事件中检测到并进行处理)。
使用游戏手柄函数时,输入可以来自 轴、按钮 和/或 帽子,GameMaker Studio 2 将分配以下部分或全部内置常量(请注意,“帽子” 通常仅可以在非标准控制器上被检测到):
常量 | 描述 |
---|---|
gp_face1 | 顶部按钮 1(这映射到 Xbox 360 控制器上的 “A” 和 PS 控制器上的 × 按钮) |
gp_face2 | 顶部按钮 2(这映射到 Xbox 360 控制器上的 “B” 和 PS 控制器上的 ○ 按钮) |
gp_face3 | 顶部按钮 3(这映射到 Xbox 360 控制器上的 “X” 和 PS 控制器上的 □ 按钮) |
gp_face4 | 顶部按钮 4(这映射到 Xbox 360 控制器上的 “Y” 和 PS 控制器上的 △ 按钮) |
gp_shoulderl | 左肩按钮 |
gp_shoulderlb | 左肩扳机 |
gp_shoulderr | 右肩按钮 |
gp_shoulderrb | 右肩扳机 |
gp_select | 选择按钮(这是 DS4 控制器上的 PS 按钮) |
gp_start | 开始按钮(这是 PS4 控制器上的 “OPTIONS” 按钮) |
gp_stickl | 按下左摇杆(作为按钮) |
gp_stickr | 按下右摇杆(作为按钮) |
gp_padu | D-pad 上 |
gp_padd | D-pad 下 |
gp_padl | D-pad 左 |
gp_padr | D-pad 右 |
gp_axislh | 左摇杆水平轴(模拟) |
gp_axislv | 左摇杆垂直轴(模拟) |
gp_axisrh | 右摇杆水平轴(模拟) |
gp_axisrv | 右摇杆垂直轴(模拟) |
为了更好地理解每个常量所代表的控制器的哪个部分,你可以参考以下的标准 Xinput 游戏手柄图像:你可以在下面找到所有游戏手柄函数列表:
- gamepad_is_supported
- gamepad_iget_guid
- gamepad_get_device_count
- gamepad_is_connected
- gamepad_get_description
- gamepad_get_button_threshold
- gamepad_set_button_threshold
- gamepad_axis_count
- gamepad_axis_value
- gamepad_button_check
- gamepad_button_check_pressed
- gamepad_button_check_released
- gamepad_button_count
- gamepad_button_value
- gamepad_hat_count
- gamepad_hat_value
- gamepad_set_vibration
- gamepad_set_axis_deadzone
- gamepad_set_colour
以下游戏手柄函数也存在,用于将内置常量重新映射到给定游戏手柄的直接物理输入。这些函数 仅适用于 Windows 桌面、Ubuntu、macOS 和Android 目标平台,在 Windows 上,它们 仅对 Direct input 设备 有效。虽然 GameMaker Studio 2 带有基于 SDL Gamepad Controller DB 的许多不同游戏手柄的映射,但是由于存在大量的控制器类型和品牌,所以不可能将 GML 常量正确映射到每个品牌和型号的游戏手柄输入,因此你可以使用这些函数创建自己的自定义映射。
以下列表显示了跨平台的当前兼容性(请注意,这将随着将来的更新而更改):
sudo apt-get install jstest-gtk
sudo apt-get install joystick.
这将为操纵杆(joystick) / 游戏手柄(gamepad) 以及操纵杆 / 游戏手柄 API 本身安装 GUI 支持。不 允许重新映射控制器常量。
理想情况下,在 所有 目标平台上,你希望枚举可用游戏手柄 “插槽” 的列表,然后检查它们以查看是否检测到任何设备,如下所示:
var maxpads = gamepad_get_device_count();for (var i = 0; i < maxpads; i++)
{
if (gamepad_is_connected(i))
{
// 对手柄 “i” 做些什么
}
}